package main

import (
	"bytes"
	"encoding/json"
	"fmt"
	"github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common"
	"github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors"
	"github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/profile"
	"github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/regions"
	"github.com/caryxychen/cloudindustry-sdk-go/client/asafe"
)

func main() {
	// 必要步骤：
	// 实例化一个认证对象，入参需要传入账户密钥对secretId，secretKey。需要在工业云生态接入平台中获取
	// 你也可以直接在代码中写死密钥对，但是小心不要将代码复制、上传或者分享给他人，
	// 以免泄露密钥对危及你的财产安全。
	credential := common.NewCredential("secretId",
		"secretKey")
	//credential.Token = "xxtoken"
	// 非必要步骤
	// 实例化一个客户端配置对象，可以指定超时时间等配置
	cpf := profile.NewClientProfile()
	// SDK默认使用POST方法。
	// 如果你一定要使用GET方法，可以在这里设置。GET方法无法处理一些较大的请求。
	// 如非必要请不要修改默认设置。
	cpf.HttpProfile.ReqMethod = "POST"
	// SDK有默认的超时时间，如非必要请不要修改默认设置。
	// 如有需要请在代码中查阅以获取最新的默认值。
	cpf.HttpProfile.ReqTimeout = 30
	cpf.HttpProfile.Scheme = "HTTP"
	// SDK会自动指定域名。通常是不需要特地指定域名的，但是如果你访问的是金融区的服务，
	// 则必须手动指定域名，例如云服务器的上海金融区域名： cvm.ap-shanghai-fsi.tencentcloudapi.com
	//cpf.HttpProfile.Endpoint = "instance-console-app-api.delivery.wedev.cool"
	// 正式环境，需要修改域名
	cpf.HttpProfile.Endpoint = "iot-app-api.industry-tiyan.xyz"

	// SDK默认用HmacSHA256进行签名，它更安全但是会轻微降低性能。
	cpf.SignMethod = "TC3-HMAC-SHA256"
	// SDK 默认用 zh-CN 调用返回中文。此外还可以设置 en-US 返回全英文。
	// 但大部分产品或接口并不支持全英文的返回。
	// 如非必要请不要修改默认设置。
	cpf.Language = "zh-CN"
	//打印日志，默认是false
	// cpf.Debug = true

	// 实例化要请求产品的client对象
	// 第二个参数是地域信息，可以直接填写字符串ap-guangzhou，或者引用预设的常量
	client, _ := asafe.NewClient(credential, regions.Guangzhou, cpf)
	// 实例化一个请求对象，根据调用的接口和实际情况，可以进一步设置请求参数
	// 属性可能是基本类型，也可能引用了另一个数据结构。
	// 推荐使用IDE进行开发，可以方便的跳转查阅各个接口和数据结构的文档说明。
	request := asafe.NewDescribeAlertsRequest()
	request.Limit = 10
	request.Page = 1
	// 通过client对象调用想要访问的接口，需要传入请求对象
	response, err := client.DescribeAlerts(request)

	// 处理异常
	if _, ok := err.(*errors.TencentCloudSDKError); ok {
		fmt.Printf("An API error has returned: %s", err)
		return
	}
	// 非SDK异常，直接失败。实际代码中可以加入其他的处理。
	if err != nil {
		panic(err)
	}
	// 打印返回的RequestId
	fmt.Printf("%+v", response.Response.RequestId)

	// 打印返回的具体数据
	fmt.Printf("%+v", PrintStruct(response.Response.Data))

}

// PrintStruct 打印出结构体json格式化输出
func PrintStruct(ent interface{}) string {
	bs, _ := json.Marshal(ent)
	var out bytes.Buffer
	json.Indent(&out, bs, "", "\t")
	return out.String()
}
